www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/send_process.m

    function sendSymb = send_process(iUE)
%  发端处理流程
% 基站的基带处理函数,该函数仅用户数据信道,PDSCH处理流程为:
% 产生信息-->CRC校验-->码块分割-->turbo编码-->速率匹配
% -->加扰-->层映射-->预编码-->子载波映射-->OFDM调制-->天线映射
% 根据时域信道或频域信道,输出sendSymb代表时域符号或频域载波映射后符号
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-07-11
%  ==========================================================
global LTE_par

CP = LTE_par.CP;                        % 循环前缀长度
nTx = LTE_par.BS_par.nAnt;              % 基站端天线数
nTB = LTE_par.UE_par.nCW(iUE);          % iUE的TB数
RNTI = LTE_par.UE_par.RNTI;             % 无线网络临时指示
nLayer = LTE_par.UE_par.nLayer(iUE);    % iUE的层数
sizeTB = LTE_par.UE_par.sizeTB(:,iUE);  % iUE的传输块大小
cellID = LTE_par.BS_par.cellID;         % 小区ID号
iSubFrame = LTE_par.iSubFrame;          % 当前子帧号 取值为0~9
FFT_SIZE = LTE_par.FFT_SIZE;            % FFT变换点数
transMod = LTE_par.UE_par.transMod;     % 传输模式 1~7
preProcess = LTE_par.UE_par.preProcess; % 预处理模式  1:singleAnt,2:tranmitDiversity 3:spatialMultiplexing
PMI = LTE_par.UE_par.PMI(iUE);          % 第iUE个用户的预编码码本索引
M_0_SYMB = LTE_par.UE_par.M_0_SYMB(iUE);% 码字0调制符号数
modSymbCell = cell(nTB,1);              % 为发端复值调制符号分配空间
f = [];
 % ============ 信息生成 ========================
sendInfoBit = info_gen(sizeTB);                                
for iTB = 1:nTB
    
    % 调制方式对应的阶数
    Qm = LTE_par.UE_par.Qm(iTB,iUE);    
    
    %  =========== 码块分割 =====================
    segBit = codeblock_segment(sendInfoBit{iTB},iUE,iTB);
    
    % 获取当前用户CB数
    nCB = LTE_par.UE_par.nCB(iTB,iUE);
    
    for iCB = 1:nCB
        
        % ========== Turbo 编码 ================
        encodeBit = turbo_encoder(segBit{iCB});
        
        % ========== 速率匹配 ==================
        rateMatchBit = rate_match(encodeBit,iUE,iTB,iCB);
        
        % ========== 码块级联 ==================
        f = cat(2,f,rateMatchBit);     
        
    end
    
    % ============== 加扰 ======================
    [scrambleBit] = scramble(f,iTB,RNTI,iSubFrame,cellID);

    % ============== 调制 ======================
    modSymb = modulation(scrambleBit,Qm);
    modSymbCell{iTB} = modSymb;
    f = [];
    
end

% 码字1调制符号数
LTE_par.UE_par.M_0_SYMB(iUE) = length(modSymbCell{1});

% ================= 层映射 ==================================
layerSymb = layer_mapping(modSymbCell,nTB,nLayer,preProcess);

% ================= 预编码 ==================================
precodedSymb = precoding(layerSymb,preProcess,transMod,nTx,PMI,M_0_SYMB);

% ================ 子载波映射 ===============================
% 得到天线端口上资源格形式的复值符号
% 输出为cell类型  举例:mapSymbCell{iTx}(iCarr,iOfdm)
mapSymbCell = sub_carr_mapping(precodedSymb,iUE);

% ================ 频谱搬移 ================================
% 频域位置交换{B A}-->{A B}
for iTx = 1:nTx
    mapSymbCell{iTx} = [mapSymbCell{iTx}(FFT_SIZE/2+1:FFT_SIZE,:);mapSymbCell{iTx}(1:FFT_SIZE/2,:)];
end

% =============== OFDM符号生成 =============================
ofdmSymb = ofdm_generation(mapSymbCell,FFT_SIZE,nTx,CP);


% 根据添加的是时域信道还是频域信道,选择输出符号是否经过OFDM
if LTE_par.channelFreq == false
    % 时域信道 输出OFDM调制符号
    sendSymb = ofdmSymb; 
    
else
    % 发端子载波映射后的频域符号
    sendSymbFreq = zeros(nTx,FFT_SIZE,length(CP));
    
    for iTx = 1:nTx
        sendSymbFreq(iTx,:,:) = mapSymbCell{iTx};
    end
    
    sendSymb = sendSymbFreq; % 发端频谱搬移后的符号
    
end